AWS Security Hubコントロールを無効化したら、AWS Configの料金が増加した話
「無効化で料金増加って、有効化とタイトル間違えてるんじゃないの?」と思った方もいるかも知れません。
間違いではないです。実際に体験したため、自戒を込めてブログにします。
サマリ
- AWS Security Hubでコントロールを無効化すると、対応するAWS Configのルールも無効化される
- AWS Configルールを無効化すると、対応する「AWS::Config::ResourceCompliance」リソースが削除される(ステータスが「ResourceDeleted」になる)
- 「AWS::Config::ResourceCompliance」はConfigルールの評価を記録するリソース
- Configルールの該当リソース数分作成される
- リソースステータスの更新(削除)により設定項目が記録される
- ルールの対象リソース数分に前述のリソースが存在するため、リソース数が多い場合は設定項目数が増加し、AWS Configの料金が増加する可能性あり
事象
無効化したSecurity Hubコントロール
今回無効化したコントロールは、「Backup.1」です。
AWS Backup復旧ポイントが保管時に暗号化されているかをチェックするものです。
AWS Backup コントロール - AWS Security Hub
なぜ無効化したか
AWS Backup復旧ポイントの数が多い環境で、AWS Configの料金が増加していたからです。
AWS提供のソリューション(AFT)を動作させている環境でそれ以外のリソースは稼働しておらず、既存のAWS Backup復旧ポイントは暗号化されていました。
設定を変更しない限り復旧ポイントが暗号化されて作成されるため、リスクは低いと判断しSecurity Hubコントロール「Backup.1」を無効化しました。
復旧ポイントが多いとAWS Configの課金が増加する理由については、以下のブログをご確認ください。
無効化によって「AWS::Config::ResourceCompliance」が記録・課金増加
無効化時の期待していた動作と実際の動作は以下です。
- 期待していた動作: 無効化時に「AWS::Config::ResourceCompliance」は更新されず、設定項目は記録されない
- 実際の動作: 無効化時に「AWS::Config::ResourceCompliance」が削除され記録される(ステータス
ResourceDeleted
が記録される)
Configルールの無効化することで、それ以降は「AWS::Config::ResourceCompliance」は更新されず記録されないと想定していました。
実際は、リソースAWS::Config::ResourceCompliance
が削除されます。削除時にConfigで記録されます。
「AWS::Config::ResourceCompliance」はルールの対象リソース数分存在します。
例えば、AWS Backup復旧ポイントが10,000個あって、Security Hubコントロール(Configルール)がAWS Backup復旧ポイント10,000個を対象としているとします。
その場合、「AWS::Config::ResourceCompliance」も10,000個存在します。
Security Hubコントロール(Configルール)無効化によって該当の「AWS::Config::ResourceCompliance」は削除されるため、10,000個分設定項目が作成されます。
作成される設定項目分、課金が発生します。
公式ドキュメントには以下の記述があり、無効化時に更新が発生することがわかります。
Security Hub では、AWS::Config::ResourceCompliance 設定項目を更新すると AWS Config 設定レコーダーのコストに影響する可能性があります。AWS Config ルールに関連付けられた Security Hub コントロールがコンプライアンス状態を変更したり、有効化/無効化されたり、パラメータを更新するたびに記録の更新が発生します。
課金額の発生で「AWS::Config::ResourceCompliance」の記録については把握していたのですが、削除の動作を見落としていました。 (考えてみれば、Configルールが評価されたときに作成されるから、Configルールが無効になったら削除されるのありえそうなものでしたが。。)
事象を回避する方法
Security Hubコントロール無効化前にAWS Configの記録対象からリソースタイプAWS::Config::ResourceCompliance
を除外すれば、事象を回避することができます。
公式ドキュメントには以下の記述があり、除外してもSecurity Hubの動作には影響無い旨が分かります。
AWS Config 設定レコーダーを Security Hub のみに使用し、この設定項目を他の目的には使用しない場合は、AWS Config コンソールまたは AWS CLI で記録をオフにすることをお勧めします。これにより、AWS Config コストを削減できます。Security Hub でセキュリティチェックを行うために AWS::Config::ResourceCompliance を記録する必要はありません。
Security Hub以外でどういった影響があるのか気になるところです。
AWS::Config::ResourceCompliance
を無効化するデメリットと影響については、次の節で説明します。
AWS::Config::ResourceCompliance
を無効化するデメリット
デメリットは、コンプライアンス履歴が確認できなくなることです。
AWS::Config::ResourceCompliance
はコンプライアンス履歴の確認時に使用できます。
ドキュメントには、以下の記述がありました。
コンプライアンスステータスを正確に報告するには、AWS::Config::ResourceCompliance リソースタイプを記録する必要があります。
例えば、AWS CLIで以下のコマンドを実行すると、S3バケット configrules-bucketのCofigルールへの準拠・非準拠の履歴を確認することができます。(※)
aws configservice get-resource-config-history --resource-type AWS::Config::ResourceCompliance --resource-id AWS::S3::Bucket/configrules-bucket
この方法は、AWS::Config::ResourceCompliance
が記録されていることが前提になります。
マネジメントコンソールの場合、AWS Config
-> リソース
-> <該当リソース>
-> リソースタイムライン
-> イベントタイプ
をコンプライアンスイベント
に設定します。
以下のように、いつどのルールに準拠しているかしていないかを確認できます。
1枚目が記録している環境で、2枚目が記録していない環境です。
※ リソースのコンプライアンス履歴タイムラインの表示 - AWS Config
一時的にAWS Config記録対象からAWS::Config::ResourceCompliance
を除外すればどうか
「一時的に記録対象から除外すれば、回避できるのでは?」と考えましたが、課金は回避できません。
具体的には以下の方法です。
- AWS Configの記録対象から
AWS::Config::ResourceCompliance
を除外 - SecurityHubコントロールの無効化
- AWS Configの記録対象から
AWS::Config::ResourceCompliance
追加(もとに戻す)
「2.」のタイミングで設定項目は作成されるため、一見すると課金を回避できそうです。
しかし、「3.」のタイミングで項目が更新されるため、設定項目が作成されます。
「1」のタイミングでリソースのステータスがOK
だとします。
「2.」で実際のリソースのステータスがResourceDelted
になりますが、除外しているため記録されません。
「3.」で戻す際に、リソース情報を取得します。AWS Config上は、ステータスOKですが、実際はResourceDelted
です。
AWS Configは、ResourceDelted
に更新して、設定項目を作成します。
おわりに
AWS Security Hubコントロールを使うにはAWS Configの理解も必要です。
コントロール有効化・無効化時にAWS::Config::ResourceCompliance
がAWS Configに記録されることを覚えておきましょう。
コントロールの対象リソース数が多い場合は、発生するコストを把握したうえで有効化・無効化を行いましょう。
以上、AWS事業本部の佐藤(@chari7311)でした。